package com.qf.service.impl;

import com.qf.dao.CartDao;
import com.qf.dao.GoodsDao;
import com.qf.dao.impl.CartDaoImpl;
import com.qf.dao.impl.GoodsDaoImpl;
import com.qf.pojo.Cart;
import com.qf.pojo.Goods;
import com.qf.service.CartService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author mkr
 * @version V1.0
 * @Project java2203-mkr
 * @Package com.qf.service.impl
 * @Description:
 * @Date 2022/5/25 16:54
 */
public class CartServiceImpl implements CartService {

    @Override
    public boolean createCart(Integer uid, Integer pid) {
        //1、根据用户id和商品id，到数据库中查询是否已经有这个商品的数据
        CartDao cartDao = new CartDaoImpl();
        Cart cart = cartDao.findCartByUidAndPid(uid , pid);

        //根据商品id，查询商品对象
        GoodsDao goodsDao = new GoodsDaoImpl();
        Goods goods = goodsDao.findById(pid);

        if (cart != null){
            //2、判断如果能够查询到这个购物项数据，进行购买数量的添加
            //购买件数+1
            cart.setNum(cart.getNum()+1);
            //将商品对象放入到购物车中
            cart.setGoods(goods);
            //重新计算总价钱 = 商品购买数量 * 商品单价
            cart.setMoney(cart.getNum()*goods.getPrice());
            //调用到，将最新的购物车数据更新到表中
            cartDao.updateCart(cart);
        }else {
            //3、判断如果查不到这个购物项的数据，那么作为新的购物项添加到数据库中
            //因为cart购物车为null，所以需要new创建购物车对象
            cart = new Cart();

            //用户id
            cart.setUid(uid);
            //商品id
            cart.setPid(pid);
            //购买数量
            cart.setNum(1);
            //将商品对象放入购物车中
            cart.setGoods(goods);
            //总价
            cart.setMoney(cart.getNum()*goods.getPrice());

            cartDao.insertCart(cart);
        }

        return true;
    }

    @Override
    public List<Cart> findCarListByUid(Integer uid) {
        //根据用户id，查询购物项集合
        CartDao cartDao = new CartDaoImpl();
        List<Cart> cartList = cartDao.findCartListByUid(uid);
        //查询所有商品数据
        GoodsDao goodsDao = new GoodsDaoImpl();
        List<Goods> goodsList = goodsDao.findGoodsAll();

        //
        Map<String , Goods> goodsMap = new HashMap<String, Goods>();
        if (goodsList != null){
            for (Goods goods : goodsList){
                //以商品id作为key，以商品对象作为value
                goodsMap.put(String.valueOf(goods.getId()), goods);
            }
        }
        if (cartList != null){
            for (Cart cart : cartList){
                Goods goods = goodsMap.get(String.valueOf(cart.getPid()));
                if (goods != null){
                    //如果商品对象不为空，那么放入购物车对象中
                    cart.setGoods(goods);
                }
            }
        }
        return cartList;
    }

    @Override
    public void updateCart(Integer cid, Integer num) {
        //1、根据cid，到数据库查询这个购物项的数据
        CartDao cartDao = new CartDaoImpl();
        Cart cart = cartDao.findById(cid);

        //2、根据查询到的购物项的商品id，到商品表中查询对应的商品数据
        GoodsDao goodsDao = new GoodsDaoImpl();
        Goods goods = goodsDao.findById(cart.getPid());

        //3、重新计算总价 = 商品单价 * 商品购买数量
        cart.setNum(num);
        cart.setGoods(goods);
        cart.setMoney(goods.getPrice()*num);
        cartDao.updateCart(cart);

    }
    /**
     * 根据id删除购物项
     */
    @Override
    public void deleteBuId(Integer id) {
        CartDao cartDao = new CartDaoImpl();
        cartDao.deleteById(id);
    }





}
